// 请求锁，防止重复请求
let isExporting = false;

// 消息监听器
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    if (request.action === "exportBookmarks") {
        if (!isExporting) {
            // 传递排除项列表
            exportBookmarks(request.excludeItems || []);
        } else {
            console.log('已有导出任务正在进行中，请等待完成');
            // 通知popup有请求正在进行
            try {
                chrome.runtime.sendMessage({
                    action: "showResult",
                    success: false,
                    error: "已有验证任务正在进行中，请等待完成"
                });
            } catch (e) {
                console.log('无法发送消息到popup:', e);
            }
        }
    }
});

// 定时任务（每天执行）
chrome.alarms.create("dailyCheck", { delayInMinutes: 60, periodInMinutes: 1440 });

chrome.alarms.onAlarm.addListener((alarm) => {
    if (alarm.name === "dailyCheck" && !isExporting) {
        exportBookmarks();
    }
});

function processBookmarks(data) {
    // 验证输入数据
    if (!Array.isArray(data)) {
        throw new Error('输入数据必须是数组');
    }

    // 处理数组中的每个节点
    return data.map(item => processNode(item));
}

// 递归处理节点函数
function processNode(node) {
    // 创建基础节点
    const newNode = {
        id: node.id || '',
        title: node.title || ''
    };

    // 添加URL（仅当存在时）
    if (node.url) {
        newNode.url = node.url;
    }

    // 递归处理子节点
    if (node.children && Array.isArray(node.children)) {
        newNode.children = node.children
            .map(child => processNode(child))
            .filter(child => child); // 过滤空节点
    }

    return newNode;
}

// 从书签树中排除选中的项目
function filterBookmarks(bookmarkTree, excludeItems) {
    if (!Array.isArray(bookmarkTree)) return [];

    return bookmarkTree.map(node => {
        // 如果是书签（叶子节点）且在排除列表中，直接排除
        if (node.url && excludeItems.includes(node.id)) {
            return null;
        }

        // 复制节点基本信息
        const newNode = {
            id: node.id,
            title: node.title
        };

        // 复制URL（如果存在）
        if (node.url) {
            newNode.url = node.url;
        }

        // 递归处理子节点（如果存在）
        if (node.children && Array.isArray(node.children)) {
            // 即使文件夹被选中，也要检查其子项
            newNode.children = filterBookmarks(node.children, excludeItems)
                .filter(child => child !== null); // 过滤掉被排除的节点

            // 如果过滤后没有子节点，且原本是文件夹，保留空children数组
            if (newNode.children.length === 0 && !node.url) {
                newNode.children = [];
            }
        }

        return newNode;
    });
}

// 书签导出函数
function exportBookmarks(excludeItems = []) {
    // 设置锁，防止重复请求
    isExporting = true;

    chrome.bookmarks.getTree((bookmarkTree) => {
        // 过滤掉排除的项目
        const filteredBookmarks = filterBookmarks(bookmarkTree, excludeItems);

        fetch('https://zhangjt.cn/api/tool/checkUrl' , {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                bookmarks: processBookmarks(filteredBookmarks)
            })
        })
            .then(response => {
                if (!response.ok) throw new Error('Network error');
                return response.json(); // 解析响应JSON
            })
            .then(data => {
                console.log('书签导出成功', data);

                // 将结果保存到存储中，以便popup可以获取
                chrome.storage.local.set({
                    'lastCheckResult': {
                        success: true,
                        data: data.data,
                        timestamp: new Date().toISOString()
                    }
                });

                // 释放锁
                isExporting = false;
            })
            .catch(error => {
                console.log('导出失败:', error);

                // 将错误保存到存储中
                chrome.storage.local.set({
                    'lastCheckResult': {
                        success: false,
                        error: error.message,
                        timestamp: new Date().toISOString()
                    }
                });

                // 释放锁
                isExporting = false;
            });
    });
}
